package org.posupe.pessoas;

import java.util.Date;

import org.posupe.util.Endereco;

public class PessoaFisica extends Pessoa {

	private String cpf;

	private String telefoneResidencial;

	private String telefoneComercial;

	private String telefoneCelular;

	private Date dataNascimento;

	private char sexo;

	public PessoaFisica(String cpf, String telefoneResidencial,
			String telefoneComercial, String telefoneCelular,
			Date dataNascimento, char sexo, String email, Endereco endereco,
			String nome) {
		super();
		this.cpf = cpf;
		this.telefoneResidencial = telefoneResidencial;
		this.telefoneComercial = telefoneComercial;
		this.telefoneCelular = telefoneCelular;
		this.dataNascimento = dataNascimento;
		this.sexo = sexo;
		super.setEmail(email);
		super.setEndereco(endereco);
		super.setNome(nome);
	}

	public String getCodigo() {
		return cpf;
	}

	public void setCodigo(String cpf) {
		this.cpf = cpf;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public char getSexo() {
		return sexo;
	}

	public void setSexo(char sexo) {
		this.sexo = sexo;
	}

	public String getTelefoneCelular() {
		return telefoneCelular;
	}

	public void setTelefoneCelular(String telefoneCelular) {
		this.telefoneCelular = telefoneCelular;
	}

	public String getTelefoneComercial() {
		return telefoneComercial;
	}

	public void setTelefoneComercial(String telefoneComercial) {
		this.telefoneComercial = telefoneComercial;
	}

	public String getTelefoneResidencial() {
		return telefoneResidencial;
	}

	public void setTelefoneResidencial(String telefoneResidencial) {
		this.telefoneResidencial = telefoneResidencial;
	}

	public String toString() {
		return "CPF: " + this.cpf + " | Nome: " + this.getNome();
	}

	public boolean match(PessoaFisica pessoaFisica) {
		boolean retorno = true;

		if (pessoaFisica != null
				&& (pessoaFisica.cpf != null
						|| pessoaFisica.dataNascimento != null
						|| pessoaFisica.telefoneCelular != null
						|| pessoaFisica.telefoneComercial != null
						|| pessoaFisica.telefoneResidencial != null
						|| pessoaFisica.getEndereco() != null
						|| pessoaFisica.getEmail() != null || pessoaFisica
						.getNome() != null)
				&& (this.cpf != null || this.dataNascimento != null
						|| this.telefoneCelular != null
						|| this.telefoneComercial != null
						|| this.telefoneResidencial != null
						|| this.getEndereco() != null
						|| this.getEmail() != null || this.getNome() != null)) {

			retorno = super.match(pessoaFisica);

			if (this.cpf != null && pessoaFisica.cpf != null && retorno) {
				retorno = this.cpf.equals(pessoaFisica.cpf);
			}
			if (this.dataNascimento != null
					&& pessoaFisica.dataNascimento != null && retorno) {
				retorno = this.dataNascimento
						.equals(pessoaFisica.dataNascimento);
			}
			if (this.telefoneCelular != null
					&& pessoaFisica.telefoneCelular != null && retorno) {
				retorno = this.telefoneCelular
						.equals(pessoaFisica.telefoneCelular);
			}
			if (this.telefoneComercial != null
					&& pessoaFisica.telefoneComercial != null && retorno) {
				retorno = this.telefoneComercial
						.equals(pessoaFisica.telefoneComercial);
			}
			if (this.telefoneResidencial != null
					&& pessoaFisica.telefoneResidencial != null && retorno) {
				retorno = this.telefoneResidencial
						.equals(pessoaFisica.telefoneResidencial);
			}
		} else {
			retorno = false;
		}
		return retorno;

	}
}
